package model

import "gorm.io/gorm"

// PageLastId 分页模型
type PageLastId struct {
	PageSize uint32      `json:"pageSize"` // 分页大小
	Total    uint32      `json:"total"`    // 数据总量
	HasNext  bool        `json:"hasNext"`  // 是否还有下一页
	LastId   uint32      `json:"lastId"`   // 翻页 last_id
	Result   interface{} `json:"result"`   // 分页大小
}

func (p *PageLastId) GetLimit() int {
	return int(p.PageSize)
}

// done 执行完毕
func (p *PageLastId) done() {
	p.HasNext = false

	if p.Total == 0 {
		return
	}
	if p.PageSize < p.Total {
		p.HasNext = true
	}
	return
}

// Execute 执行分页查询
func (p *PageLastId) Execute(db *gorm.DB, result interface{}) error {
	// 查询具体明细
	err := db.Limit(p.GetLimit()).Find(result).Error
	if err != nil {
		return err
	}
	p.Result = result

	// 查询总行数
	var total int64
	err = db.Offset(-1).Limit(-1).Count(&total).Error

	if err != nil {
		return err
	}
	p.Total = uint32(int(total))

	p.done()
	return nil
}
